﻿using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace Shared
{
    public class StringUtils
    {
        /// <summary>
        /// Permite realizar una correcion a una cadena de texto
        /// </summary>
        /// <param name="strTexto">Cadena a corregir</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static string CorreccionCadenaCompleto(string strTexto)
        {
            strTexto = EliminarMultiplesBlancos(strTexto);

            strTexto = strTexto.ToLower().Replace("á", "a");
            strTexto = strTexto.ToLower().Replace("é", "e");
            strTexto = strTexto.ToLower().Replace("í", "i");
            strTexto = strTexto.ToLower().Replace("ó", "o");
            strTexto = strTexto.ToLower().Replace("ú", "u");

            strTexto = strTexto.ToLower().Replace("â", "a");
            strTexto = strTexto.ToLower().Replace("ê", "e");
            strTexto = strTexto.ToLower().Replace("î", "i");
            strTexto = strTexto.ToLower().Replace("ô", "o");
            strTexto = strTexto.ToLower().Replace("û", "u");

            strTexto = strTexto.ToLower().Replace("à", "a");
            strTexto = strTexto.ToLower().Replace("è", "e");
            strTexto = strTexto.ToLower().Replace("ì", "i");
            strTexto = strTexto.ToLower().Replace("ò", "o");
            strTexto = strTexto.ToLower().Replace("ù", "u");

            strTexto = strTexto.ToLower().Replace("ä", "a");
            strTexto = strTexto.ToLower().Replace("ë", "e");
            strTexto = strTexto.ToLower().Replace("ï", "i");
            strTexto = strTexto.ToLower().Replace("ö", "o");
            strTexto = strTexto.ToLower().Replace("ü", "u");

            strTexto = strTexto.Trim();
            return strTexto;
        }

        /// <summary>
        /// Permite eliminar los espacion multiplese en blanco de una cadena
        /// </summary>
        /// <param name="strTexto">Cadena a eliminar los espacion en blanco</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static string EliminarMultiplesBlancos(string strTexto)
        {
            if ((!string.IsNullOrEmpty(strTexto)))
            {
                string cret = strTexto;
                while (Regex.IsMatch(cret, "  ", RegexOptions.IgnoreCase))
                {
                    cret = Regex.Replace(cret, "  ", " ").Trim();
                }
                return cret;
            }
            return "";
        }

        /// <summary>
        /// Permite realizar una limpieza de caracteres raros/extraños en una cadena de texto
        /// </summary>
        /// <param name="strTexto">Cadena a Limpiar</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static string LimpiaCaracteres(string strTexto)
        {
            string cret = strTexto.ToUpper().Trim();
            while (Regex.IsMatch(cret, "(([.:;+\\-/]+)( )|([.:;+\\-/]+))", RegexOptions.IgnoreCase))
            {
                cret = Regex.Replace(cret, "(([.:;+\\-/]+)( )|([.:;+\\-/]+))", " ").Trim();
            }
            return cret;
        }
    }
}